import CryptoJS from 'crypto-js'

/**
 * 目前该加密方式不支持后端
 */

// 默认的 KEY 与 iv 如果没有给
const KEY = CryptoJS.enc.Utf8.parse('TMXKJ5EBOV824B13')
const IV = CryptoJS.enc.Utf8.parse('TMXKJ5EBOV824B13')
/**
 * AES加密 ：字符串 key iv  返回base64
 */
export function EncrypConfig(data) {
	let iv = IV,
		key = KEY
	if (typeof data === 'object') {
		// 如果传入的data是json对象，先转义为json字符串
		try {
			data = JSON.stringify(data)
		} catch (error) {
			console.log('error:', error)
		}
	}
	// 统一将传入的字符串转成UTF8编码
	const dataHex = CryptoJS.enc.Utf8.parse(data) // 需要加密的数据
	const keyHex = CryptoJS.enc.Utf8.parse(key) // 秘钥
	const ivHex = CryptoJS.enc.Utf8.parse(iv) // 偏移量
	const encrypted = CryptoJS.AES.encrypt(dataHex, keyHex, {
		iv: ivHex,
		mode: CryptoJS.mode.CBC, // 加密模式
		padding: CryptoJS.pad.Pkcs7
	})
	return encrypted.ciphertext.toString() //  返回加密后的值
}

/**
 * AES 解密 ：字符串 key iv  返回base64
 */
export function DecryptConfig(encryptedVal) {
	let key = KEY,
		iv = IV
	let encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedVal)
	let srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr)
	const keyHex = CryptoJS.enc.Utf8.parse(key) // 秘钥
	const ivHex = CryptoJS.enc.Utf8.parse(iv) // 偏移量
	let decrypt = CryptoJS.AES.decrypt(srcs, keyHex, {
		iv: ivHex,
		mode: CryptoJS.mode.CBC,
		padding: CryptoJS.pad.Pkcs7
	})
	let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8)
	return decryptedStr.toString()
}
